/**
 * @since 2019-03-29-11:37
 */

/**
 * 格式化数字变为每3位加一个逗号
 * @param num
 * @returns {string}
 */
export const formatNumberAsPrice = function(num) {
    // 如果数字带有小数点的话，可以使用toLocaleString()方法实现这个需求。
    // 没有小数点，就用正则匹配实现。
    return (num.toString().indexOf('.') !== -1) ? num.toLocaleString() : num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
};

/**
 * 获取浏览器参数
 * @param name
 * @returns {*}
 * @constructor
 */
export function getQueryString(name)
{
    let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
    let r = window.location.search.substr(1).match(reg);// search,查询？后面的参数，并匹配正则
    if (r != null) return decodeURIComponent(r[2]); return null;
}


/**
 * 从多少分改为多少元 1234->12.34
 */
export function changePriceFromFen(val) {
    try {
        let number = Number.parseFloat(val);
        return keepN(number / 100);
    } catch (e) {
        return 0;
    }
}

/**
 * 保留n位小数，精确后, 防止float出现1.39999的情况
 * export function keepN(val, n = 2) {
 */
export function keepN(val, n = 2) {
    if (val === null || val === '') {
        return '';
    }
    // let fixed = 0;
    // if (n === null) { fixed = 2 } else { fixed = n }
    let num = Number.parseFloat(val);
    return Number.parseFloat(num.toPrecision(12)).toFixed(n);
}

/**
 * px转rem
 * 750 为px的设计
 *
 */
export function pxToRem(num) {
    if (!num) {
        return 0;
    }
    let px = Number.parseInt(num, 10);
    // 获取浏览器宽度
    let width = document.documentElement.clientWidth;
    // 计算根节点大小
    let fontSize = width / 7.5;
    // 换算传入的大小
    return px / fontSize;
}

/**
 * px转rem
 * 750 为px的设计
 *
 */
export function pxToRemString(num) {
    return pxToRem(num) + 'rem';
}

/**
 * 脱敏处理名字
 * 一个字的名字：显示一个字加星号。例：虎 -> 虎*
 * 两个字的名字：显示第一个字加星号。例：老虎 -> 老*
 * 三个字的名字：显示第一个字和最后一个字。例如：大老虎 -> 大*虎
 */
export function blurName(name) {
    if (!name) {
        return name;
    }
    let length = name.length;
    // 1
    if (length === 1) {
        return name + '*';
    }
    if (length === 2) {
        return name.substring(0, 1) + '*';
    }
    if (length > 2) {
        return name.substring(0, 1) + '**' + name.substring(length - 1);
    }
}

/**
 * hash name的值，从list取出对应的值
 * 目前使用的是获取name的unicode总和，然后取list长度的模；
 * @code{
 *      let list = ['至尊人气达人', '人气杠杠的', '我是人气王'];
 *      let name = '我们';
 *      let unicode = 31934 + 23192;
 *      hash = 50023 % 3;
 * }
 * @param name
 * @param list
 * @returns {string}
 */
export function hashFormString(name, list) {
    // 按名字unicode总和取称号
    let unicode = name.split('').reduce((total, item) => { return total + item.charCodeAt(0) }, 1);
    return list[unicode % list.length];
}

/**
 * 图片url转base64
 * @param src
 * @returns {Promise<any>}
 */
export function srcToBase64(src) {
    return new Promise((resolve, reject) => {
        let img = new Image();
        img.src = src;
        img.setAttribute('crossOrigin', 'anonymous');
        img.onload = function () {
            let canvas = document.createElement('canvas');
            canvas.width = img.width;
            canvas.height = img.height;

            let ctx = canvas.getContext('2d');
            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
            let dataURL = canvas.toDataURL();
            resolve(dataURL);
        };
        img.onerror = function(e) {
            reject(e);
        };
    });
}

export function formatDate(date, formatStr='yyyy-MM-dd hh:mm:ss')
{
    var str = formatStr;
    var Week = ['日','一','二','三','四','五','六'];

    str=str.replace(/yyyy|YYYY/,date.getFullYear());
    str=str.replace(/yy|YY/,(date.getYear() % 100)>9?(date.getYear() % 100).toString():'0' + (date.getYear() % 100));

    str=str.replace(/MM/,date.getMonth()>9?date.getMonth().toString():'0' + date.getMonth());
    str=str.replace(/M/g,date.getMonth());

    str=str.replace(/w|W/g,Week[date.getDay()]);

    str=str.replace(/dd|DD/,date.getDate()>9?date.getDate().toString():'0' + date.getDate());
    str=str.replace(/d|D/g,date.getDate());

    str=str.replace(/hh|HH/,date.getHours()>9?date.getHours().toString():'0' + date.getHours());
    str=str.replace(/h|H/g,date.getHours());
    str=str.replace(/mm/,date.getMinutes()>9?date.getMinutes().toString():'0' + date.getMinutes());
    str=str.replace(/m/g,date.getMinutes());

    str=str.replace(/ss|SS/,date.getSeconds()>9?date.getSeconds().toString():'0' + date.getSeconds());
    str=str.replace(/s|S/g,date.getSeconds());

    return str;
}